package backtype.storm.topology;

import java.io.Serializable;
import java.util.Map;


/**
 * Common methods for all possible components in a topology. This interface is
 * used when defining topologies using the Java API.
 */
public interface IComponent extends Serializable {

    /**
     * Declare the output schema for all the streams of this topology.
     * 
     * @param declarer
     *            this is used to declare output stream ids, output fields, and
     *            whether or not each output stream is a direct stream
     */
    void declareOutputFields(OutputFieldsDeclarer declarer);


    /**
     * Declare configuration specific to this component. Only a subset of the
     * "topology.*" configs can be overridden. The component configuration can
     * be further overridden when constructing the topology using
     * {@link TopologyBuilder}
     * 
     */
    Map<String, Object> getComponentConfiguration();

}
